____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
ÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻ
Raytracing
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
top
Raytracing (dt. Strahlverfolgungcite-ref-1[1] oder Strahlenverfolgung,cite-ref-2[2] in englischer Schreibweise meist ray tracing) ist ein auf der Aussendung von Strahlen basierender Algorithmus zur Verdeckungsberechnung, also zur Ermittlung der Sichtbarkeit von dreidimensionalen Objekten von einem bestimmten Punkt im Raum aus. Ebenfalls mit Raytracing bezeichnet man mehrere Erweiterungen dieses grundlegenden Verfahrens, die den weiteren Weg von Strahlen nach dem Auftreffen auf OberflÀchen berechnen.
Verwendung findet Raytracing in der 3D-Computergrafik. Hier ist der grundlegende Raytracing-Algorithmus eine Möglichkeit zur Darstellung einer 3D-Szene. Erweiterungen, die den Weg von Lichtstrahlen durch die Szene simulieren, dienen, ebenso wie das Radiosity-Verfahren, der Berechnung der Lichtverteilung.
Weitere Anwendungsgebiete von Raytracing sind die Auralisation, Seismikcite-ref-3[3] und Hochfrequenztechnik.
Contents
âą Grundprinzip
âą Shading
âą Beispielcode
âą Leistung
âą Speicherbedarf
âą Erweiterungen
âą Schatten
âą Ăbersicht
âą Besonderes
âą Einsatzgebiete
âą Computergrafik
âą Literatur
âą Weblinks
âą Anmerkungen
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Ursprung und Bedeutung
Vor der Entwicklung von Raytracing bestand das junge Gebiet der 3D-Computergrafik im Wesentlichen aus einer Reihe von âProgrammiertricksâ, mit denen die Schattierung von beleuchteten Objekten nachgeahmt werden sollte. Raytracing war der erste Algorithmus auf diesem Gebiet, der einen gewissen physikalischen Sinn ergab.
Das erste mit Raytracing berechnete Bild wurde 1963 an der University of Maryland auf einem oszilloskopartigen Bildschirm ausgegeben.cite-ref-4[4] Als Entwickler des Raytracing-Algorithmus gelten oft Arthur Appel, Robert Goldstein und Roger Nagel, die den Algorithmus Ende der 1960er Jahre veröffentlichten.cite-ref-5[5]cite-ref-6[6]cite-ref-7[7] Weitere Forscher, die sich zu dieser Zeit mit Raytracing-Techniken beschĂ€ftigten, waren Herb Steinberg, Marty Cohen und Eugene Troubetskoy.cite-ref-8[8] Raytracing basiert auf der geometrischen Optik, bei der das Licht als eine Gruppe von Strahlen verstanden wird. Die beim Raytracing verwendeten Techniken wurden bereits wesentlich frĂŒher, unter anderem von Herstellern optischer Systeme, verwendet. Heute verwenden viele Renderer (Computerprogramme zur Erzeugung von Bildern aus einer 3D-Szene) Raytracing, eventuell in Kombination mit weiteren Verfahren.
Einfache Formen des Raytracings berechnen nur die direkte Beleuchtung, also das direkt von den Lichtquellen eintreffende Licht. Raytracing wurde seit seiner ersten Verwendung in der Computergrafik jedoch mehrmals wesentlich erweitert. Weiterentwickelte Formen berĂŒcksichtigen auch das indirekte Licht, das von anderen Objekten reflektiert wird; man spricht dann von einem globalen Beleuchtungsverfahren.
Der Begriff Raycasting bezeichnet meist eine vereinfachte Form des Raytracings, wird teilweise aber auch synonym dazu gebraucht.
Grundprinzip
Die Erzeugung eines Rasterbildes aus einer 3D-Szene wird Rendern oder Bildsynthese genannt. Voraus geht die Erstellung einer solchen Szene vom Benutzer mit Hilfe eines 3D-Modellierungswerkzeugs.
In der Szenenbeschreibung werden zumindest folgende Daten angegeben:
âą die lokalen Beleuchtungsmodelle und deren Parameter, die die Farben und Materialien der einzelnen Objekte der Szene bestimmen;
âą die Lichtquellen der Szene.
Daneben wird beim Raytracing auch die Position eines Augpunktes sowie einer Bildebene angegeben, die zusammen die Perspektive angeben, aus der die Szene betrachtet wird. Der Augpunkt ist ein Punkt im Raum, der der Position einer virtuellen Kamera oder eines allgemeinen Beobachters entspricht. Die Bildebene ist ein virtuelles Rechteck, das sich in einiger Entfernung zum Augpunkt befindet. Sie ist die dreidimensionale Entsprechung des zu rendernden Rasterbildes im Raum. Rasterförmig verteilte Punkte auf der Bildebene entsprechen den Pixeln des zu erzeugenden Rasterbildes.
Verdeckungsberechnung
Raytracing ist in erster Linie ein Verfahren zur Verdeckungsberechnung, also zur Ermittlung der Sichtbarkeit von Objekten ab dem Augpunkt. Das Grundprinzip ist recht einfach.
Raytracing arbeitet mit einer Datenstruktur, Strahl genannt, die den Anfangspunkt und die Richtung einer Halbgeraden im Raum angibt. Es wird fĂŒr jedes Pixel die Richtung des Strahls berechnet, der vom Augpunkt aus zum entsprechenden Pixel der Bildebene weist. FĂŒr jedes Primitiv der Szene wird nun mittels geometrischer Verfahren der eventuelle Schnittpunkt, bei dem der Strahl auf das Primitiv trifft, ermittelt. Dabei wird gegebenenfalls die Entfernung vom Augpunkt zum Schnittpunkt berechnet. Der âGewinnerâ, also das vom Augpunkt aus sichtbare Primitiv, ist dasjenige mit der geringsten Distanz.
Das Prinzip der Aussendung der Strahlen vom Augpunkt aus Ă€hnelt dem Aufbau einer Lochkamera, bei der ein Objekt auf einem Film abgebildet wird. Beim Raytracing sind allerdings âFilmâ (Bildebene) und âLochâ (Augpunkt) vertauscht. Ăhnlich wie bei der Lochkamera bestimmt der Abstand zwischen Bildebene und Augpunkt die âBrennweiteâ und damit das Sichtfeld.
Da die Strahlen nicht wie in der Natur von den Lichtquellen, sondern vom Augpunkt ausgehen, spricht man auch von Backward Ray Tracing. Raytracing beschÀftigt sich mit der Frage, woher das Licht kommt. Einige Veröffentlichungen nennen das Verfahren allerdings Forward Ray Tracing oder Eye Ray Tracing.
Schnittpunkttests
Der oben erwĂ€hnte Test auf einen eventuellen Schnittpunkt von Strahl und Primitive ist das HerzstĂŒck des Raytracings. Solche Tests lassen sich fĂŒr eine Vielzahl von Primitiventypen formulieren. Neben Dreiecken und Kugeln sind unter anderem Zylinder, Quadriken, Punktwolken oder gar Fraktale möglich.
Bei Kugeln ist der Schnittpunkttest eine relativ kurze und einfache Prozedur, was die PopularitĂ€t dieser Objekte auf Raytracing-Testbildern erklĂ€rt. Viele Renderprogramme lassen jedoch aus GrĂŒnden der Einfachheit nur Dreiecke als Primitiven zu, aus denen sich jedes beliebige Objekt nĂ€herungsweise zusammensetzen lĂ€sst.
Seit Kurzem werden auch komplexere Geometrien fĂŒr den Schnittpunkttest wie etwa NURBS verwendet.cite-ref-9[9] Vorteilhaft dabei ist ein Maximum an PrĂ€zision, da die FlĂ€che nicht wie sonst ĂŒblich in Dreiecke unterteilt wird. Der Nachteil ist eine erhöhte Renderzeit, da der Schnittpunkttest mit komplexen FreiformflĂ€chen sehr viel aufwĂ€ndiger als mit einfachen Dreiecken ist. Eine hinreichende AnnĂ€herung an die Genauigkeit von NURBS ist zwar auch mit Dreiecken möglich, in diesem Fall muss aber eine sehr groĂe Anzahl gewĂ€hlt werden.
Shading
Bei der Ermittlung des nĂ€chsten Primitivs wird nicht nur der Schnittpunkt und seine Distanz zum Augpunkt, sondern auch die Normale des Primitivs am Schnittpunkt berechnet. Damit sind alle Informationen vorhanden, um die zum Augpunkt reflektierte âLichtstĂ€rkeâ und somit die Farbe zu ermitteln. Dabei werden auch die Beschreibungen der Lichtquellen der Szene genutzt. Den Berechnungen liegen lokale Beleuchtungsmodelle zugrunde, die die Materialbeschaffenheit eines Objekts simulieren. Diesen Teil des Renderers, der fĂŒr die Ermittlung der Farbe zustĂ€ndig ist, nennt man Shader.
Beispielcode
Die Programmierung eines einfachen Raytracers erfordert wenig Aufwand. In Pseudocode lĂ€sst sich das Prinzip folgendermaĂen darstellen:
Prozedur Bild_Rendern
Strahl.Ursprung := Augpunkt
FĂŒr jedes (x,y)-Pixel der Rastergrafik
Strahl.Richtung := [3D-Koordinaten des Pixels der Bildebene] â Augpunkt
Farbe des (x,y)-Pixels := Farbe_aus_Richtung(Strahl)
Funktion Farbe_aus_Richtung(Strahl)
Schnittpunkt := NÀchster_Schnittpunkt(Strahl)
Wenn Schnittpunkt.Gewinner = (kein) dann
Farbe_aus_Richtung := Hintergrundfarbe
sonst
Farbe_aus_Richtung := Farbe_am_Schnittpunkt(Strahl, Schnittpunkt)
Funktion NĂ€chster_Schnittpunkt(Strahl)
MaxDistanz := â
Schnittpunkt.Gewinner := (kein)
FĂŒr jedes Primitiv der Szene
Schnittpunkt.Distanz := Teste_Primitiv(Primitiv, Strahl)
Wenn Schnittpunkt.Distanz < MaxDistanz dann
MaxDistanz := Schnittpunkt.Distanz
Schnittpunkt.Gewinner := Primitiv
NÀchster_Schnittpunkt := Schnittpunkt
Jeder Raytracer, unabhÀngig von der verwendeten Raytracing-Variante, folgt einer Àhnlichen Struktur, die noch einen Schnittpunkttest (Teste_Primitiv) und einen Shader (Farbe_am_Schnittpunkt) enthÀlt.
Leistung
Beschleunigungstechniken
Bei der Bestimmung des ersten Primitivs, auf das ein Strahl trifft, kann, wie im weiter oben aufgefĂŒhrten Beispielcode, jedes Primitiv der Szene gegen den Strahl getestet werden. Dies ist jedoch nicht grundsĂ€tzlich erforderlich, wenn bekannt ist, dass gewisse Primitive sowieso nicht in der NĂ€he des Strahls liegen und daher nicht getroffen werden können. Da Schnittpunkttests die gröĂte Laufzeit beim Raytracing beanspruchen, ist es wichtig, so wenig Primitive wie möglich gegen den Strahl zu testen, um die Gesamtlaufzeit gering zu halten.
Bei den Beschleunigungsverfahren wird die Szene meist in irgendeiner Form automatisch aufgeteilt und die Primitiven diesen Unterteilungen zugewiesen. Wenn ein Strahl durch die Szene wandert, so wird er nicht gegen die Primitiven, sondern zunÀchst gegen die Unterteilungen getestet. Dadurch muss der Strahl nur noch gegen die Primitive derjenigen Unterteilung getestet werden, die der Strahl kreuzt.
Es wurde eine Vielzahl derartiger Beschleunigungstechniken fĂŒr Raytracing entwickelt. Beispiele fĂŒr Unterteilungsschemas sind Voxelgitter, BSP-BĂ€ume sowie Bounding Volumes, die die Primitiven umschlieĂen und eine Hierarchie bilden. Mischformen dieser Techniken sind ebenfalls populĂ€r. Auch fĂŒr Animationen gibt es spezielle Beschleunigungstechniken. Die KomplexitĂ€t dieser Techniken lassen einen Raytracer schnell zu einem gröĂeren Projekt anwachsen.
Keine Technik ist generell optimal; die Effizienz ist szenenabhĂ€ngig. Dennoch reduziert jedes Beschleunigungsverfahren die Laufzeit enorm und macht Raytracing erst zu einem praktikablen Algorithmus. Auf Kd-BĂ€umen basierende Unterteilungen sind fĂŒr die meisten nicht-animierten Szenen die effizienteste oder nahezu effizienteste Technik, da sie sich mittels Heuristiken optimieren lassen.cite-ref-10[10]cite-ref-11[11] Mehrfach festgestellt wurde, dass die asymptotische Laufzeit von Raytracing in AbhĂ€ngigkeit von der Anzahl der Primitiven logarithmisch ist.
Es wurde gezeigt, dass auf modernen Rechnern nicht die Prozessorleistung, sondern Speicherzugriffe die Geschwindigkeit des Raytracings begrenzen. Durch sorgfĂ€ltige Nutzung von Caching durch den Algorithmus ist es möglich, die Laufzeit wesentlich zu verringern. Ebenfalls möglich ist die Nutzung der SIMD-FĂ€higkeit moderner Prozessoren, die parallele Berechnungen ermöglicht, sowie speziell darauf optimierter Unterteilungsschemata.cite-ref-12[12]cite-ref-13[13] Damit ist das gleichzeitige Verfolgen mehrerer, in âPaketenâ zusammengefasster, Strahlen möglich. Grund dafĂŒr ist, dass die vom Augpunkt ausgesendeten Strahlen meist sehr Ă€hnlich sind, also meist die gleichen Objekte schneiden. Mit dem Befehlssatz SSE etwa können vier Strahlen gleichzeitig auf einen Schnittpunkt mit einem Primitiv getestet werden, was diese Berechnung um ein Vielfaches beschleunigt. Auf entsprechenden Hardwareimplementationen â zum Beispiel auf FPGAs â können auch gröĂere Pakete mit ĂŒber 1000 Strahlen verfolgt werden. Allerdings bĂŒĂen Caching- und SIMD-Optimierungen bei erweiterten Formen des Raytracings viel von ihrem Geschwindigkeitsvorteil ein.
Weiterhin ist es möglich, den gesamten Raytracing-Vorgang zu parallelisieren. Dies lĂ€sst sich etwa dadurch trivial bewerkstelligen, dass verschiedene Prozessoren bzw. Maschinen unterschiedliche Ausschnitte des Bildes rendern. Lediglich gewisse Beschleunigungstechniken oder Erweiterungen mĂŒssen angepasst werden, um parallelisierungstauglich zu sein.
Speicherbedarf
Das grundlegende Raytracing-Verfahren benötigt kaum Speicher. Jedoch belegt die Szene selbst, die sich heutzutage bei komplexen Szenen oft aus mehreren Millionen Primitiven zusammensetzt, sehr viel Speicher und kann mehrere Gigabyte umfassen. Hinzu kommt der mehr oder weniger hohe zusĂ€tzliche Speicherbedarf der Beschleunigungstechniken. Da solch groĂe Szenen nicht vollstĂ€ndig in den Arbeitsspeicher des Rechners passen, wird hĂ€ufig Swapping nötig.
Bei gröĂeren Objekten, die mehrmals in der Szene vorhanden sind und sich nur durch ihre Position und GröĂe unterscheiden (etwa bei einem Wald voller BĂ€ume), muss nicht die gesamte Geometrie neu gespeichert werden. Durch diese Instancing genannte Technik lĂ€sst sich bei bestimmten Szenen erheblich Platz einsparen.
Erweiterungen
Einer der GrĂŒnde fĂŒr den Erfolg des Raytracing-Verfahrens liegt in seiner natĂŒrlichen Erweiterbarkeit. Das oben beschriebene primitive Verfahren ist fĂŒr die heutigen Anforderungen der Bildsynthese unzureichend. Mit steigender Rechenleistung und zunehmender Inspiration aus der Physik â vor allem der Optik und der Radiometrie â kamen mehrere Erweiterungen und Varianten auf, von denen einige hier kurz vorgestellt werden sollen.
GrundsĂ€tzlich gilt, dass mit jeder Erweiterung die erreichbare QualitĂ€t der gerenderten Bilder sowie der relative Zeitbedarf stark anstieg und mit Path Tracing das Maximum erreichte. Erst nachfolgende Entwicklungen zielten darauf ab, den Zeitaufwand von Path Tracing zu verringern, ohne an QualitĂ€t einzubĂŒĂen.
Schatten
Aufgrund der FlexibilitÀt des Raytracing-Algorithmus ist es möglich, Lichtstrahlen nicht nur vom Augpunkt, sondern auch von beliebigen anderen Punkten des Raums auszusenden. Wie Arthur Appel bereits 1968 demonstrierte, kann dies dazu benutzt werden, Schatten zu simulieren.
Ein beliebiger Punkt einer OberflĂ€che befindet sich genau dann im Schatten, wenn sich zwischen ihm und der Lichtquelle ein Objekt befindet. Indem vom Schnittpunkt an der OberflĂ€che ein Schattenstrahl in Richtung der Lichtquelle ausgesendet wird, lĂ€sst sich bestimmen, ob ein Objekt dessen Weg kreuzt. Ist dies der Fall, so befindet sich der Schnittpunkt im Schatten, und es wird als Helligkeit des Strahls 0 zurĂŒckgegeben. Im anderen Fall findet normales Shading statt.
Rekursives Raytracing
Raytracing lĂ€sst sich nicht nur auf einfache lichtundurchlĂ€ssige, sondern auch auf durchsichtige und spiegelnde, reflektierende Objekte anwenden. Dabei werden weitere Lichtstrahlen von den Schnittpunkten ausgesendet. Bei spiegelnden FlĂ€chen etwa muss dabei lediglich die Richtung des von der FlĂ€che ausgehenden Strahls gemÀà dem Reflexionsgesetz (Einfallswinkel ist gleich Reflexionswinkel) berĂŒcksichtigt und ein entsprechender Reflexionsstrahl errechnet werden.
Bei lichtdurchlÀssigen Objekten wird ein Strahl gemÀà dem Snelliusschen Brechungsgesetz ausgesendet, diesmal ins Innere des betreffenden Objektes. Generell reflektieren transparente Objekte auch einen Teil des Lichts. Die relativen Farbanteile des reflektierten und des gebrochenen Strahls lassen sich mit den Fresnelschen Formeln berechnen. Diese Strahlen werden auch SekundÀrstrahlen genannt.
Da die SekundÀrstrahlen auf weitere Objekte fallen können, wird der Algorithmus rekursiv aufgerufen, um mehrfache Spiegelungen und Lichtbrechungen zu ermöglichen. Die hierarchische Gesamtheit der Aufrufe wird auch Renderbaum genannt.
In Pseudocode sieht der Shader beim rekursiven Raytracing in etwa wie folgt aus:
Funktion Farbe_am_Schnittpunkt(Strahl, Schnittpunkt)
Wenn Schnittpunkt.Gewinner.Material = spiegelnd oder transparent dann
Reflektierter_Anteil := Fresnel(Strahl, Schnittpunkt)
Farbe := Reflektierter_Anteil à Farbe_aus_Richtung(Reflexionsstrahl)
+ Gebrochener_Anteil Ă Farbe_aus_Richtung(Gebrochener Strahl)
sonst
Farbe := 0
FĂŒr jede Lichtquelle
Schattenstrahl := Lichtquelle.Position - Schnittpunkt.Position
SchattenSchnittpunkt := NÀchster_Schnittpunkt(Schattenstrahl)
Wenn SchattenSchnittpunkt.Gewinner = Lichtquelle dann
Farbe := Farbe + Direkte_Beleuchtung(Strahl, Lichtquelle)
Farbe_am_Schnittpunkt := Farbe
Der Rest des Programms kann wie beim einfachen Raytracing bleiben. Die hier aufgerufene Funktion Farbe_aus_Richtung kann wiederum Farbe_am_Schnittpunkt aufrufen, woraus der rekursive Charakter des Verfahrens deutlich wird.
Diffuses Raytracing
â
Hauptartikel
:
Diffuses Raytracing
Rekursives Raytracing ermöglicht neben Lichtbrechung und -reflexion die Simulation von harten Schatten. In Wirklichkeit haben Lichtquellen jedoch eine bestimmte GröĂe, was dazu fĂŒhrt, dass Schatten weich und verschwommen wirken.
Dieser Effekt, sowie Antialiasing, glÀnzende Reflexion und mehr, lassen sich mit diffusem Raytracing (auch stochastisches Raytracing oder distributed ray tracing genannt) simulieren, das 1984 von Cook u. a. veröffentlicht wurde.cite-ref-16[16] Die Idee ist, in verschiedenen Situationen statt eines Strahls mehrere Strahlen auszusenden und aus den errechneten Farben den Mittelwert zu bilden. Beispielsweise lassen sich weiche Schatten mit Kern- und Halbschatten erzeugen, indem die Richtungen der Schattenstrahlen zufÀllig verteilt die OberflÀche der Lichtquelle abtasten.cite-ref-17[17] Der Nachteil ist, dass dabei Bildrauschen entsteht, wenn zu wenig Strahlen verwendet werden. Es gibt jedoch Möglichkeiten wie Importance Sampling, die das Rauschen reduzieren.
Path Tracing und Light Ray Tracing
â
Hauptartikel
:
Path Tracing
Obwohl diffuses Raytracing zahlreiche Effekte ermöglicht, ist es immer noch nicht in der Lage, die globale Beleuchtung mit Effekten wie diffuser Interreflexion und Kaustiken (durch BĂŒndelung von Licht erzeugte helle Lichtflecken) zu simulieren. Dies liegt daran, dass zwar bei spiegelnden Reflexionen, nicht jedoch bei diffusen OberflĂ€chen SekundĂ€rstrahlen ausgesendet werden.
In seiner 1986 veröffentlichten Publikation beschrieb James Kajiya die Rendergleichung, die die mathematische Basis fĂŒr alle Methoden der globalen Beleuchtung bildet.cite-ref-18[18] Die von einem Strahl beigetragene âHelligkeitâ wird dabei radiometrisch korrekt als Strahldichte interpretiert. Kajiya zeigte, dass zur globalen Beleuchtung SekundĂ€rstrahlen von allen OberflĂ€chen ausgesendet werden mĂŒssen. Daneben wies er auch darauf hin, dass ein Renderbaum den Nachteil hat, dass zu viel Arbeit fĂŒr die Berechnungen in groĂer Hierarchietiefe verschwendet wird und es besser ist, jeweils einen einzigen Strahl auszusenden. Diese Methode ist heute als Path Tracing bekannt, da ein Strahl sich vom Augpunkt aus seinen âWegâ durch die Szene sucht. Path Tracing hat eine rigorose mathematische und physikalische Basis.
Falls beim Path Tracing der von einer diffusen OberflĂ€che ausgesandte SekundĂ€rstrahl eine Lichtquelle direkt trifft, so wird dieser Helligkeitsanteil ĂŒblicherweise ignoriert. Der Anteil der direkten Beleuchtung wird stattdessen weiterhin per Schattenstrahl berechnet. Alternativ kann die direkte Beleuchtung berechnet werden, indem nur ein SekundĂ€rstrahl gemÀà dem lokalen Beleuchtungsmodell ausgesendet wird und, falls dieser eine Lichtquelle direkt trifft, deren Strahldichte zurĂŒckgegeben wird. Welche dieser beiden Methoden effizienter ist, hĂ€ngt vom lokalen Beleuchtungsmodell der OberflĂ€che sowie vom von der OberflĂ€che betrachteten Raumwinkel der Lichtquelle ab.cite-ref-19[19] Die konzeptuell einfachere Variante des Path Tracing, bei der keine Schattenstrahlen ausgesandt werden, ist als Adjoint Photon Tracing bekannt.cite-ref-20[20]
Obwohl Path Tracing die globale Beleuchtung simulieren kann, nimmt die Effizienz des Verfahrens bei kleinen Lichtquellen ab. Insbesondere Kaustiken und deren Reflexionen sind mit Path Tracing sehr verrauscht, sofern nicht sehr viele Strahlen ausgesendet werden. Deshalb werden meist andere, auf Path Tracing basierende Verfahren oder Erweiterungen verwendet.
Light Ray Tracing ist eine seltene Variante, bei der die Lichtstrahlen nicht vom Augpunkt, sondern von den Lichtquellen ausgesendet werden. Die Pixel, die vom Strahl auf der Bildebene getroffen werden, werden eingefÀrbt. Dadurch lassen sich bestimmte Effekte wie Kaustiken gut, andere Effekte jedoch nur sehr ineffizient simulieren, da viele Strahlen die Bildebene verfehlen.
Weitere Entwicklungen
Da sich einige Effekte nur vom Augpunkt, andere nur von den Lichtquellen aus gut simulieren lassen, wurden Algorithmen entwickelt, die beide Methoden kombinieren. Das Ziel ist es, Szenen mit beliebig komplexer Lichtverteilung und -reflexion effizient rendern zu können.
Bidirektionales Path Tracing,
unabhĂ€ngig voneinander 1993 und 1994 von Lafortune/Willems und E. Veach/Leonidas J. Guibas entwickelt, ist eine direkte Erweiterung des Path Tracing, bei der Strahlen sowohl vom Augpunkt als auch von den Lichtquellen aus gesendet und beide Pfade anschlieĂend kombiniert werden.cite-ref-21[21]cite-ref-22[22] Die Auftreffpunkte des Lichtpfades werden als punktförmige virtuelle Lichtquellen zur Beleuchtung des Augpfades herangezogen. Bidirektionales Path Tracing kann als Verallgemeinerung von Path Tracing, Adjoint Photon Tracing oder Light Ray Tracing betrachtet werden, da es den Lichtaustausch zwischen allen möglichen Kombinationen von Auftreffpunkten der beiden Pfade berĂŒcksichtigt. Das Verfahren bietet meist eine bessere Leistung als reines Path Tracing, vor allem bei der Berechnung von Kaustiken, beseitigt jedoch nicht vollstĂ€ndig dessen Probleme.
Metropolis Light Transport (MLT)
ist eine Erweiterung des bidirektionalen Path Tracing und wurde 1997 von Veach und Guibas vorgestellt.cite-ref-23[23] Bei MLT werden die Lichtstrahlen so ausgesendet, dass sie sich der Beleuchtung anpassen und die Szene âerkundenâ. Die Idee des Verfahrens ist es, âguteâ Pfadkombinationen, ĂŒber die viel Energie transportiert wird, nach ihrem Auffinden nicht sofort wieder zu verwerfen, sondern weiterzuverwenden. MLT bietet oft deutliche Geschwindigkeitsvorteile und vernĂŒnftige Ergebnisse bei Szenen, die mit anderen (vorherigen) Algorithmen nur schwer korrekt zu simulieren sind. Ebenso wie Path Tracing und bidirektionales Path Tracing liefert MLT bei geeigneter Implementierung statistisch erwartungstreue Bilder, das heiĂt, die einzige Abweichung vom idealen Bild besteht im Bildrauschen; andere Fehler sind ausgeschlossen.
wurde 1995 von Jensen veröffentlicht.cite-ref-24[24] Das Verfahren besteht im Aussenden von Partikeln von den Lichtquellen aus und deren Speicherung in einer speziellen, von der Geometrie unabhÀngigen Struktur. Dieser Algorithmus war insofern ein Durchbruch, als er es ermöglicht, die Beleuchtung in einem Vorbearbeitungsschritt zu speichern und diese wÀhrend des Rendervorgangs relativ schnell zu rekonstruieren.
Photon Mapping ist kein eigenstĂ€ndiges Rendering-Verfahren, sondern dient der ErgĂ€nzung von anderen Raytracing-Methoden â meistens, um diffuses Raytracing auf globale Beleuchtung zu erweitern. Allerdings ist Photon Mapping nicht erwartungstreu, in der PrĂ€zision schwer intuitiv kontrollierbar und weniger robust als MLT. Dies macht sich vor allem bei Szenen mit schwierigen LichtverhĂ€ltnissen bemerkbar.
Ăbersicht
| Raytracing-Verfahren | Schatten | Lichtreflexion / - brechung / - streuung | Beleuchtung | Beispielbild |
|---|---|---|---|---|
| Nur Verdeckungsberechnung | Keine | Keine | Keine | |
| Simulation von Schatten (mit nur einem Schattenstrahl) | Nur harte Schatten | Keine | Nur direkte Beleuchtung | |
| Rekursives Raytracing | Nur harte Schatten | Nur bei spiegelnden / brechenden OberflÀchen | Nur direkte Beleuchtung oder Spiegelung / Brechung | |
| Diffuses Raytracing | VollstÀndig | Nur bei spiegelnden / brechenden OberflÀchen | Nur direkte Beleuchtung oder Spiegelung / Brechung | |
| Path Tracing (und nachfolgende Verfahren) | VollstÀndig | VollstÀndig (auch diffus ) | VollstÀndig ( Globale Beleuchtung ) | |
Besonderes
Die angefĂŒhrten gĂ€ngigen Varianten des Raytracings lassen sich erweitern, um zusĂ€tzliche Effekte zu ermöglichen. Einige Beispiele:
ist ein verbreitetes Modellierverfahren, bei dem Objekte aus anderen Objekten zusammengesetzt werden. Raytracing lÀsst sich relativ einfach um CSG-FunktionalitÀt erweitern.cite-ref-25[25]
sowie Displacement Mapping und Bumpmapping sind ebenfalls fĂŒr Raytracing möglich. Bei letzterem Verfahren muss allerdings darauf geachtet werden, dass die erzeugten Reflexionsrichtungen stets vom Objekt weg weisen.
ermöglicht die realistische Simulation teilweise durchscheinender und das Licht streuender Objekte. Dazu gehören beispielsweise Milch oder BlÀtter, aber auch das Himmelsblau und atmosphÀrische Bedingungen.
Spektrales Rendering
Die meisten gĂ€ngigen Raytracer verwenden den RGB-Farbraum zur Darstellung von Farben, was nur eine AnnĂ€herung an das kontinuierliche Lichtspektrum darstellt und nicht immer physikalisch plausibel ist. Indem fĂŒr die Farbe eine von der WellenlĂ€nge des Lichts abhĂ€ngige ReprĂ€sentation verwendet wird, lassen sich Effekte wie Metamerie und Dispersion simulieren. Auch Polarisation und Fluoreszenz sind möglich.cite-ref-26[26]
Indem die Farbwerte beim Raytracing durch Gleitkommazahlen berechnet und in HDR-Bildern mit hohem Kontrastumfang gespeichert werden, ist es möglich, Helligkeit und Kontrast von gerenderten Bildern nachtrÀglich ohne QualitÀtsverlust beliebig zu verÀndern. Beim Image-based Lighting wird die zu rendernde Szene von einem HDR-Bild umschlossen, was eine realistische Ausleuchtung durch aufgenommene Umgebungen ermöglicht.
Relativistisches Raytracing
Durch BerĂŒcksichtigung der Formeln fĂŒr die spezielle RelativitĂ€tstheorie lassen sich die optischen Effekte, die bei gekrĂŒmmter Raumzeit auftreten, veranschaulichen.cite-ref-27[27] Die StrahlverlĂ€ufe werden hierbei unter BerĂŒcksichtigung der hohen Geschwindigkeiten und Massen modifiziert; auĂerdem ergeben sich Helligkeits- und FarbĂ€nderungen.
Einsatzgebiete
Computergrafik
Raytracing-Berechnungen gelten als sehr zeitintensiv. Raytracing wird daher vornehmlich bei der Erzeugung von Darstellungen eingesetzt, bei denen eher die QualitĂ€t als die Berechnungszeit im Vordergrund steht. Ein Bild mit Raytracing zu berechnen, kann abhĂ€ngig von der verwendeten Technik, der SzenenkomplexitĂ€t, der verwendeten Hardware und der gewĂŒnschten QualitĂ€t beliebig lange â in der Praxis oft mehrere Stunden, in EinzelfĂ€llen sogar mehrere Tage â dauern. In Bereichen wie der Virtuellen RealitĂ€t, in der rĂ€umliche Darstellungen in Echtzeit berechnet werden mĂŒssen, konnte sich Raytracing daher bisher nicht durchsetzen. Computeranimationsfilme werden ĂŒberwiegend mit dem REYES-System erzeugt, bei dem Raytracing-Berechnungen so weit wie möglich vermieden werden. Gelegentlich wurde Raytracing von der Demoszene genutzt.
GegenĂŒber ĂŒblichen Echtzeitrenderern auf Z-Buffer-Basis hat Raytracing jedoch mehrere Vorteile: eine einfache Implementierung mit ĂŒberschaubarer KomplexitĂ€t, eine im Gegensatz zur Grafikpipeline hohe FlexibilitĂ€t sowie die leichtere Austauschbarkeit der Shader und dadurch eine erleichterte Implementierung neuer Shader. Die Geschwindigkeit von Raytracing muss daher in Relation zur erreichten BildqualitĂ€t gesetzt werden. FĂŒr die anspruchsvollen QualitĂ€tsanforderungen der realistischen Bildsynthese gibt es, insbesondere bei komplizierten Szenen mit beliebigen Materialien, keine Alternative zu Raytracing.
Es existieren Bestrebungen, echtzeitfĂ€hige Raytracer fĂŒr komplexe Szenen zu implementieren, was bereits unter bestimmten Voraussetzungen mit prozessor- und speicheroptimierten Softwarelösungen gelungen ist. Auf Hardware optimierte Implementierungen von Raytracing zeigen, dass die kĂŒnftige breite Nutzung von Raytracing im Echtzeitbereich denkbar ist. Mit diesen Anwendungen beschĂ€ftigen sich Projekte wie die OpenRT-Programmierschnittstelle und diverse Implementierungen fĂŒr programmierbare Grafikprozessoren (GPGPU). AuĂerdem wurden spezielle Architekturen fĂŒr hardwarebeschleunigtes Raytracing entwickelt.cite-ref-28[28]
Weitere Anwendungsgebiete
Das Raytracing-Prinzip kann auf beliebige Anwendungsbereiche ausgeweitet werden, bei denen die Ausbreitung von Wellen in einer Szene simuliert werden soll. Strahlen reprĂ€sentieren dabei stets die Normalenvektoren zu einer Wellenfront. In der Auralisation und Hochfrequenztechnik versucht man, die Auswirkungen einer Szene auf die Akustik beziehungsweise auf ein elektromagnetisches Feld zu simulieren. Das Ziel ist es, fĂŒr bestimmte Frequenzen den Energieanteil zu berechnen, der von einem Sender zu einem EmpfĂ€nger ĂŒber die verschiedenen möglichen Wege durch die Szene ĂŒbertragen wird.
In der Akustik ist Raytracing neben der Spiegelschallquellenmethode und der Diffusschallberechnung eine Möglichkeit zur Lösung dieses Problems. Zur Simulation mĂŒssen die Materialeigenschaften der verschiedenen Körper sowie die DĂ€mpfung des Schalls durch die Luft berĂŒcksichtigt werden.
Eine Möglichkeit zum Auffinden der Ăbertragungswege besteht darin, Strahlen von einer Quelle isotrop (in alle Richtungen) auszusenden, eventuell mit Energieverlust an den GegenstĂ€nden zu reflektieren und die Gesamtenergie der auf den EmpfĂ€nger auftreffenden Strahlen zu ermitteln. Diese Methode wird Ray launching genannt. Strahlen können auch eine bestimmte âFormâ â etwa die einer Röhre â haben, um punktförmige EmpfĂ€nger simulieren zu können. Der Nachteil dieser Methode ist ihre Langsamkeit, da viele Strahlen nie den EmpfĂ€nger erreichen und fĂŒr prĂ€zise Statistiken eine hohe Anzahl vonnöten ist.
Ein weiteres Problem ergibt sich dadurch, dass die WellenlĂ€nge oft nicht gegenĂŒber den Abmessungen der Körper innerhalb einer Szene vernachlĂ€ssigbar ist. Sofern die Beugung von Strahlen nicht berĂŒcksichtigt wird, kann es daher zu merklichen Fehlern in der Simulation kommen.
Literatur
⹠Philip Dutré, Philippe Bekaert, Kavita Bala: Advanced Global Illumination. AK Peters, Natick MA 2003, ISBN 1-56881-177-2. (advancedglobalillumination.com)
âą Andrew S. Glassner: An Introduction to Ray tracing. Morgan Kaufmann, London 1989, ISBN 0-12-286160-4.
âą Andrew S. Glassner: Principles of Digital Image Synthesis. Morgan Kaufmann, London 1995, ISBN 1-55860-276-3.
âą Matt Pharr, Greg Humphreys: Physically Based Rendering. From Theory to Implementation. Morgan Kaufmann, London 2004, ISBN 0-12-553180-X. (pbrt.org)
âą Peter Shirley: Realistic Ray Tracing. AK Peters, Natick MA 2003, ISBN 1-56881-198-5.
âą Kevin G. Suffern: Ray Tracing from the Ground Up. AK Peters, Wellesley MA 2007, ISBN 978-1-56881-272-4.
Weblinks
Commons
: Raytracing
â Sammlung von Bildern, Videos und Audiodateien
âą Ray Tracing News (englisch)
âą Liste von Schnittpunkttest-Algorithmen fĂŒr verschiedene Primitiventypen (englisch)
âą Tomâs Hardware: âWhen Will Ray Tracing Replace Rasterization?â (englisch)
âą Illusions-Schmiede: âLehrvideo Raytracingâ
Anmerkungen
cite-note-11. â Hans-Joachim Bungartz u. a.: EinfĂŒhrung in die Computergraphik: Grundlagen, geometrische Modellierung, Algorithmen, S. 135. Vieweg, Braunschweig 2002, ISBN 3-528-16769-6
cite-note-22. â Beat BrĂŒderlin, Andreas Meier: Computergrafik und Geometrisches Modellieren, S. 154. Teubner, Stuttgart 2001, ISBN 3-519-02948-0
cite-note-44. â Terrence Masson: CG 101: A Computer Graphics Industry Reference. S. 267. Digital Fauxtography 2007, ISBN 0-9778710-0-2
cite-note-55. â Arthur Appel: Some Techniques for Shading Machine Renderings of Solids. In Proceedings of the Spring Joint Computer Conference 1968. S. 37â45. AFIPS Press, Arlington
cite-note-88. â Terrence Masson: CG 101: A Computer Graphics Industry Reference. In: Digital Fauxtography, 2007, ISBN 0-9778710-0-2, S. 162.
cite-note-99. â Oliver Abert u. a.: Direct and Fast Ray Tracing of NURBS Surfaces. In Proceedings of IEEE Symposium on Interactive Ray Tracing 2006. S. 161â168. IEEE, Salt Lake City 2006, ISBN 1-4244-0693-5. (archivierte Kopie. [Memento vom 2. Dezember 2007 im Internet Archive; PDF; 700 kB]) In: uni-koblenz.de
cite-note-1010. â Vlastimil Havran u. a.: Statistical Comparison of Ray-Shooting Efficiency Schemes. Technical Report TR-186-2-00-14, Institute of Computer Graphics and Algorithms, Vienna University of Technology 2000 (ist.psu.edu)
cite-note-1111. â Ingo Wald, Vlastimil Havran: On building fast kd-trees for ray tracing, and on doing that in O(N log N). In Proceedings of IEEE Symposium on Interactive Ray Tracing 2006. S. 61â69. IEEE, Salt Lake City 2006, ISBN 1-4244-0693-5. (archivierte Kopie. [Memento vom 17. MĂ€rz 2007 im Internet Archive; PDF; 230 kB]) In: cgg.cvut.cz
cite-note-1212. â Ingo Wald u. a.: Interactive Rendering with Coherent Ray Tracing. Computer Graphics Forum 20, 3 (Sep. 2001), S. 153â164, ISSN 0167-7055. (archivierte Kopie. [Memento vom 5. Juni 2005 im Internet Archive]) In: graphics.cs.uni-sb.de
cite-note-1414. â Douglas Scott Kay: Transparency, Refraction and Ray Tracing for Computer Synthesized Images. Thesis, Cornell University, Ithaca 1979
cite-note-1515. â Turner Whitted: An Improved Illumination Model for Shaded Display. Communications of the ACM 23, 6 (June 1980): 343â349, ISSN 0001-0782. (archivierte Kopie. [Memento vom 27. Januar 2017 im Internet Archive; PDF; 4,6 MB]) In: old.siggraph.org
cite-note-1717. â Peter Shirley, Changyaw Wang, Kurt Zimmermann: Monte Carlo Techniques for Direct Lighting Calculations. ACM Transactions on Graphics 15, 1 (Jan. 1996), S. 1â36. (archiviete Kopie. [Memento vom 5. August 2011 im Internet Archive; PDF; 400 kB]) In: s.utah.edu
cite-note-1919. â Eric Veach, Leonidas J. Guibas: Optimally combining sampling techniques for Monte Carlo rendering. In SIGGRAPH â95 Proceedings, S. 419â428. ACM, New York 1995, ISBN 0-89791-701-4 (graphics.stanford.edu)
cite-note-2020. â R. Keith Morley u. a.: Image synthesis using adjoint photons. In Proceedings of Graphics Interface 2006, S. 179â186. Canadian Information Processing Society, Toronto 2006, ISBN 1-56881-308-2. (archivierte Kopie. [Memento vom 25. Juni 2012 im Internet Archive; PDF; 4,7 MB]) In: cs.utah.edu
cite-note-2121. â Eric Lafortune, Yves Willems: Bi-Directional Path Tracing. In Proceedings of Compugraphics â93. S. 145â153. Alvor 1993 (graphics.cornell.edu)
cite-note-2222. â Eric Veach, Leonidas Guibas: Bidirectional Estimators for Light Transport. In Eurographics Rendering Workshop 1994 Proceedings. S. 147â162. Darmstadt 1994 (graphics.stanford.edu)
cite-note-2323. â E. Veach, L.J. Guibas: Metropolis Light Transport. In SIGGRAPH â97 Proceedings. S. 65â76. ACM Press, New York 1997, ISBN 0-89791-896-7 (graphics.stanford.edu)
cite-note-2626. â Alexander Wilkie u. a.: Combined Rendering of Polarization and Fluorescence Effects. In: Proceedings of the 12th Eurographics Workshop on Rendering Techniques. Springer, London 2001, ISBN 3-211-83709-4, S. 197â204. (archivierte Kopie. [Memento vom 18. Februar 2022 im Internet Archive; PDF; 2,9 MB]) In: cg.tuwien.ac.at
cite-note-2727. â Daniel Weiskopf u. a.: Real-World Relativity: Image-Based Special Relativistic Visualization. In IEEE Visualization: Proceedings of the Conference on Visualization 2000. S. 303â310. IEEE Computer Society Press, Salt Lake City 2000, ISBN 1-58113-309-X. (archivierte Kopie. [Memento vom 13. Juni 2007 im Internet Archive; PDF; 640 kB]) In: tat.physik.uni-tuebingen.de
cite-note-2828. â Jörg Schmittler u. a.: SaarCOR â A Hardware Architecture for Ray Tracing. In Proceedings of the SIGGRAPH/EUROGRAPHICS Conference On Graphics Hardware. S. 27â36. Eurographics, Aire-la-Ville 2002, ISBN 1-58113-580-7. (archivierte Kopie. [Memento vom 28. Juli 2007 im Internet Archive; PDF; 1,0 MB]) In: graphics.cs.uni-sb.de